package com.pn.service.impl;

import com.pn.entity.Product;
import com.pn.entity.Result;
import com.pn.mapper.ProductMapper;
import com.pn.page.Page;
import com.pn.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;


import java.util.List;

@Service
public class ProductServiceImpl implements ProductService {
    @Autowired
    private ProductMapper productMapper;

    /**
     * @param page    分页实体
     * @param product 商品实体
     * @return 分页商品查询结果
     */
    @Override
    public Page queryProductPage(Page page, Product product) {
        int productCount = productMapper.selectProductCount(product);
        List<Product> productList = productMapper.selectProductPage(page, product);
        page.setTotalNum(productCount);
        page.setResultList(productList);
        return page;
    }

    /**
     * @param product 接收商品实体类
     * @return 商品添加结果 统一通知类
     */
    @Value("${file.access-path}")
    private String accessPath;

    //添加商品的业务方法
    @Override
    public Result saveProduct(Product product) {

        //处理上传的图片的访问地址 -- /img/upload/图片名称
        product.setImgs(accessPath + product.getImgs());

        //添加商品
        int i = productMapper.insertProduct(product);

        if (i > 0) {
            return Result.ok("添加商品成功！");
        }

        return Result.err(Result.CODE_ERR_BUSINESS, "添加商品失败！");
    }

    /**
     * 修改商品上下架状态的业务方法
     *
     * @param product 商品实体类
     * @return 修改结果
     */
    @Override
    public Result updateProductState(Product product) {
        int i = productMapper.updateStatById(product);
        if (i > 0) {
            return Result.ok("修改成功");
        }
        return Result.err(Result.CODE_ERR_BUSINESS, "修改失败");
    }

    /**
     * 根据商品ID删除j商品
     *
     * @param productId 商品ID
     * @return 删除结果通知类
     */
    @Override
    public Result deleteProduct(Integer productId) {
        int i = productMapper.deleteProductById(productId);
        if (i > 0) {
            return Result.ok("商品删除成功");
        }
        return Result.err(Result.CODE_ERR_BUSINESS, "商品删除失败");
    }


    @Override
    public Result updateProduct(Product product) {
        /*
        处理商品上传的图片的访问地址:
        如果 product 对象的 imgs 属性值没有以/img/upload/开始,说明商品的图片
        被修改了即上传了新的图片,那么 product 对象的 imgs 属性值只是图片的名称,
        则给图片名称前拼接/img/upload 构成商品新上传的图片的访问地址;
        */
        if (!product.getImgs().startsWith(accessPath)) {
            product.setImgs(accessPath + product.getImgs());
        }
        int i = productMapper.updateProductById(product);
        if (i > 0) {
            return Result.ok("商品修改成功！");
        }
        return Result.err(Result.CODE_ERR_BUSINESS, "商品修改失败！");
    }
}
